Портативный Total Commander со своим менеджером приложений

Audion TC

Файловый менеджер, который носит с собой каталог из полусотни программ, ставит их одним выбором и держит в актуальном состоянии — без установки в систему.
Portable · Total Commander 11 x64 · 4 сборки из одного кода
С чего начинается

Total Commander из коробки — голый инструмент

  • Лучший двухпанельный менеджер: горячие клавиши, плагины, архивы, FTP — годами ничем не заменить.
  • Но свежая установка пуста: ни настроенных панелей, ни привычных программ, ни единой утилиты под рукой.
  • А рабочий день — это десятки портативных утилит рядом: диагностика, редакторы, плееры, конвертеры, сеть.
Как это обычно

Собрать окружение вручную — рутина на полдня

  • Каждую программу найди на своём сайте, выбери portable-вариант, скачай, распакуй, разложи по папкам.
  • У многих портатив включается вручную — маркером-файлом или ключом: без него настройки утекут в %APPDATA% и реестр.
  • А через месяц всё это надо обновлять. По одному. Снова руками.
  • Переставил Windows — начинай сначала. Полдня, которых нет.
Что вместо этого

Сборка носит каталог и ставит его одним выбором

Каталог

Полсотни программ

Диагностика, редакторы, медиа, сеть — описаны в одной карте, ставятся прямо в сборку.

Один вход

Меню «Audion TC»

Установка, обновление, атлас, версии — всё в верхнем меню Total Commander.

Без следов

Портативно

Ничего в систему: программы, настройки и профили живут внутри папки сборки.

Дальше — как это устроено внутри: от портатив-механики до конструктора установки.
Главная ловушка

Обновление TC затирает всё, что совпало по имени

  • Официальный установщик распаковывается поверх папки программы: любой наш файл в корне с совпавшим именем будет молча заменён.
  • Однажды на этом застряла даже справка: TC копирует файл, только если он уже лежит по тому же пути, и наша осталась от 11.56 до 11.58. Молча.
  • Значит корень сборки должен оставаться таким же чистым, как после обычной установки.
Раскладка

Своё — этажом ниже, корень нетронут

Scripts\

Код и карта

Только .ps1, карта apps_map.ini и bin\fzf.exe — весь движок сборки в одной папке.

Run\

Запускалки

Только .cmd — то, что запускает человек или сам TC. Точки входа отделены от внутренностей.

Menus\ · Apps\

Меню и программы

Меню — в Menus\, а не в территории TC. Программы — в Apps\.

Унёс Apps\ целиком — менеджер остаётся рабочим и весит 171 МБ вместо 1,8 ГБ.
Карта → интерфейс

Кнопки и меню собираются сами из одной карты

; одна секция = одна кнопка
[system.hwinfo]
dir=HWiNFO
exe=HWiNFO64.exe
menu=Датчики и железо
source=webpage
Sync-Apps.ps1

Собирает по факту наличия

Проходит карту, проверяет каждый файл на диске и переписывает панели, меню и команды — но только между своими маркерами. Снаружи маркеров — ручная территория.

Нет файла — нет кнопки; пропала последняя кнопка группы — исчезает и раздел. Состав меняется — интерфейс подстраивается без правок руками.
Get-App

Шесть источников, каждый отвечает по-своему

github

Релиз по маске

Последний /releases/latest сам пропускает Preview — Windows Terminal берётся стабильный, а не бета.

sourceforge

Лента файлов

Разбор rss?path=/, свежий выпуск сверху; редакцию Shizuku/Aoi отсекает цифра в конце имени.

webpage

Ссылка со страницы

Ищем ссылку по маске прямо в HTML; linkdeny убирает preview-сборки рядом со стабильной.

url

Постоянный адрес

Редирект на свежую версию, имя файла — из того, куда привёл: так раздаёт себя VS Code.

winget

Из манифеста

winget download тянет zip или portable; WinGet рисует свой прогресс, вывод не глушим.

techpowerup

Подписанная ссылка

Три запроса за одноразовой ссылкой; нужный вариант выбирают pick и kind.

Разрядность — маской явно (*win64*, *x64*): GitHub кладёт arm64 рядом, и *bin.zip цепляет его первым.
Грабли сети

GitHub даёт 60 запросов в час — и они кончаются

Проблема

Лимит на анонима

Одна разведка каталога выбирает квоту целиком. Дальше API отвечает rate limit exceeded — и на большой установке это происходит быстро.

Обход

Молча на HTML

Загрузчик берёт /releases/latest — редирект на тег, — и /expanded_assets/<tag> со списком файлов. Квот там нет. Проверено на живом обновлении Notepad++.

Токен GitHub (пункт меню) снимает потолок совсем: 60 → 5000 запросов в час.
Когда сайт не пускает

Фильтр узнаёт .NET по рукопожатию — обходим curl'ом

  • hwinfo.com отвечает 403 и на страницу, и на файл, если запрос пришёл из PowerShell. Подделка заголовков не помогает — фильтр опознаёт .NET по TLS-рукопожатию.
  • Штатный curl.exe из Windows тот же запрос проводит без вопросов — при 403 загрузчик молча повторяет через него.
  • SourceForge браузеру показывает «загрузка начнётся через…», а простому агенту сразу отдаёт файл — качаем под Wget/1.21.4.
  • Пришёл text/html вместо архива — общая проверка говорит об этом сразу, а не падает позже на распаковке.
Замена папки

Обновление не должно стирать нажитое

keep

Перенести своё

Маска забирает из старой версии базы и списки: FSSettings.db, lists\*-user.txt — можно и в подпапку.

prerun

Освободить файлы

У Zapret Update-Zapret.ps1 -StopOnly снимает драйвер WinDivert ровно перед заменой — после скачивания, чтобы обход блокировок ещё работал.

nobackup

Чистить изнутри

Папка не подменяется, а вычищается и наполняется заново — проходит, даже когда её держит открытая панель TC.

Остальным прежняя версия ложится рядом как .bak — но не молча: счётчик в подписи пункта не даёт сборке тихо разрастись вдвое за полгода.
Документация из данных

Атлас — карта программ и наших конфигов

Build-Atlas.ps1 → Atlas.html

Не «профиль есть», а его нутро

Каждая программа: где живёт, версия, источник, в каких сборках стоит. У конфигов — развёрнутое содержимое прямо на странице: не отметка, а те строки, что мы кладём.

Apps.md

Текстовый реестр

«Программа → версия → источник → где → в сборке». Колонка версий — из карты версий. Генерится в каждой сборке под её состав.

Плашки-фильтры вверху: клик по сборке или «с профилем» оставляет только нужное — состав виден с одного взгляда.
Центр управления

Всё управление сборкой — в одном меню

Открыть атласСоздать атлас Установить приложение…Установить выбранные Обновить одноОбновить все Собрать версииТокен GitHub УдалитьПересобратьОбновить TC
  • Гарантия: меню будут пользоваться чаще пульта — оно проще. Поэтому вход именно через меню Total Commander, а не только TUI.
  • Каждый пункт — один Panel.cmd <действие>, который прыгает прямо в нужный раздел пульта: fzf-выбор там, где выбор, рамка там, где действие.
Каталог доступного

Версия читается не из exe, а из карты

  • Определять версию из файла — тупик: у Zapret она в .bat, у многих её в exe нет вовсе. Так обновление вечно мазало.
  • «Собрать версии приложений» опрашивает источники и пишет доступную версию каждой программы в единую карту Ware\State\app-versions.json — чистый каталог того, что можно поставить.
  • Карта одна на все сборки (по полному набору), и из неё же берут версии атлас и Apps.md. Один источник на всё.
Умное обновление

«Обновить все» не тянет актуальное

Раньше

Качало всё подряд

Массовое обновление не смотрело на версию — тянуло и переставляло даже то, что уже стоит свежим. NVCleanstall 1.19 → снова 1.19, и рядом лишний .bak.

Теперь

Сверка с картой

Доступная версия сравнивается с записью в карте: совпало — пропуск, вышло новее — качаем. Версию по сети не собрать (nightly) — качаем принудительно.

.bak убирается сразу после успешной установки; при сбое — остаётся для отката. Мусор не копится.
Грабли

Карта одна — но Apps\ у сборок разный

  • Ставлю выбранное на чистый Release — а установщик молчит: карта говорит «всё актуально», и не качает ничего.
  • Причина: карта единая, а программы-то в Apps\ нет. «Актуально по карте» ≠ «установлено».
  • Фикс: пропуск срабатывает, только если папка в Apps\ реально есть и не пуста. Пусто — ставим, не глядя на карту.
Развязка

Сбор версий идёт по ссылкам, не по сборке

  • Каталог доступного — это опрос источников из apps_map. Ему не нужны ни установленные программы, ни сам Total Commander. Только ссылки.
  • Раньше загрузчик падал без TOTALCMD64.EXE рядом. Убрали жёсткое требование: корнем берётся родитель Scripts\.
  • Теперь версии собираются откуда угодно — хоть в overlay установочного пакета без TC. Проверено: в Payload сбор идёт.
Ядро истории

Любая сборка → любая конфигурация по выбору

Release

Лёгкий старт

Восемь резидентов — визитка и монитор под рукой, остальное докачивается.

Выбор юзера

Что нужно ему

Админу — диагностика, кодеру — редакторы, креатору — медиа. Один состав не подходит всем.

Ultimate

Полный фарш

Полсотни программ. Любой Release дорастает до него — было бы желание.

Задача: дать наполнить сборку под себя — наглядно, одним движением, без переустановки.
Загвоздка

Браузер не запустит PowerShell

  • Хочется визуальный выбор — чекбоксы, наборы, галочки. Это просится в HTML: наглядно и знакомо.
  • Но обычная страница в браузере не может запустить установку: песочница не пускает к файлам и процессам. И правильно делает.
  • Значит нужен HTML, который остаётся HTML на вид, но имеет право писать реестр выбора и звать скрипт.
Решение

HTA — страница с правами приложения

install.hta

Windows HTML Application

Запускается через mshta: выглядит как страница с чекбоксами, но имеет доступ к файловой системе и запуску. Один файл, никаких зависимостей.

Генерится из карты

Build-Installer.ps1

48 программ по разделам, у каждой версия из карты и метка профиля. Пресеты подтягиваются из Scripts\sets\*.txt.

Кнопка «Установить выбранные приложения» сама пишет реестр и запускает установку — без скачивания промежуточных файлов и без запущенного TC.
Поток данных

От галочки до установки — один клик

1 · выбор

Чекбоксы

Отметил вручную или пресетом.

2 · HTA

Собирает список

Имена карты + метка профиля.

3 · FSO

install.list

Пишет реестр в Ware\State.

4 · Get-App

-InstallList

Ставит выбранное.

  • HTA через FileSystemObject и WScript.Shell пишет install.list и зовёт Run\Install-Set.cmd — тот запускает ядро.
  • Строка реестра — имя записи карты, необязательно с суффиксом |noprofile. Один формат несёт и выбор, и решение про профиль.
Пресеты

Готовые наборы — кликом, состав в TXT

Scripts\sets\*.txt

Три роли из коробки

  • Админ — диагностика железа, обслуживание, сеть
  • Программист — редакторы, консоли, git
  • Креатор — видео, аудио, захват, конвертация
Как работает

Предотметка чекбоксов

Кнопка набора ставит галочки на свои программы, снимает с чужих. Список — просто имена карты, по строке; правится в блокноте, без пересборки.

Плюс Всё и Ничего — быстрый старт от любого края.
Профили

Ставить настроенной или чистой — вторая галочка

  • У программ с готовым профилем (Profiles\<prog>) в окне вторая галочка — «профиль», по умолчанию отмечена. Ставим сразу с нашими настройками.
  • Профиль — отдельный слой поверх свежей установки: наши лексеры, темы, портатив-маркеры. Снял папку в Apps\ — профиль в Profiles\ цел и вернётся.
  • Снял галочку — в реестр идёт имя|noprofile, и Get-App ставит программу чистой, не накладывая Profiles\.
Что под капотом установки

Ставит недостающее, актуальное пропускает

01Сверка с картойВерсия в карте совпала с доступной — кандидат на пропуск.
02Проверка папкиПропускаем только если Apps\<prog> реально есть и не пуста. На чистом Release — ставим.
03Скачать → проверитьВо временную папку, распаковать, убедиться, что внутри есть файл по маске, — только тогда подменить.
04Профиль и уборкаНаложить Profiles\ (если галочка), убрать .bak, снять версию в карту.
Отдельной кнопки «Установить всё» намеренно нет — её все боятся. Вход только через осознанный выбор.
Результат

Чистый Release фаршируется вживую

== HWiNFO64  (webpage)
  скачано: hwi_850.zip (20 824 195 байт)
  заготовка наложена: Profiles\HWiNFO
  прежняя версия убрана: HWiNFO.bak
== KeePassXC  (github)
  лимит GitHub API исчерпан, беру со страницы релиза
  скачано: KeePassXC-2.7.12-Win64.zip
Отметил набор → пошла установка: недостающее качается, профиль ложится, .bak убирается, кнопки пересобираются. «Всё круто!!!» — из живого прогона.
GitHub-токен

Потолок API снимается своим токеном

  • Пункт меню «Токен GitHub для скачивания приложений»: нет токена — скрытый ввод; есть — сменить, убрать, показать статус.
  • Хранится зашифрованным DPAPI под текущего пользователя Windows: на чужой машине не расшифруется.
  • В раздачу сборки не входит (это Ware\State) — и поднимает лимит с 60 до 5000 запросов в час.
Четыре сборки, один код

Код и конфиги — побайтно одинаковы

204файла кода, конфигов и карты — идентичны во всех сборках
0расхождений по содержимому — проверено хэшами MD5
4сборки: Рабочая, Release, Ultimate, установочный Payload
Намеренно разное — только бары, managed-пункты меню и атлас: они отражают состав каждой сборки. Движок один, наполнение своё.
Как проверяется

Не «должно работать», а проверено

Синтетика

Хэши и синтаксис

MD5-сверка всех скриптов и конфигов между сборками; парсер PowerShell ловит ошибку до запуска; сравнение версий на живых числах.

Живьём

Прогон на чистом

Установщик на пустом Release реально ставит, накладывает профиль, убирает .bak, пересобирает кнопки. Дыру с картой поймали именно так.

Правило сборки: добавляем рядом со старым, проверяем на живом, релиз — с откатом. Ошибку с readonly-переменной $pid нашли на прогоне и назвали своими словами.
Что в итоге

Файловый менеджер, который наполняет себя сам

  • Любая сборка → любая конфигурация одним выбором: конструктор ставит набор в один клик, профили — по галочке.
  • Каталог сам держится свежим: карта версий, обновление без лишних закачек, обход лимитов и капризных сайтов.
  • Документация растёт из данных: атлас и реестр версий собираются из той же карты, что кормит кнопки и установку.
  • И всё это — портативно, в четырёх побайтно синхронных сборках, без единого следа в системе.
Audion TC · Portable Total Commander 11 x64 · один код на четыре сборки
→ / Space / ЛКМ — следующий шаг
— назад  ·  ↓ / ↑ — слайд целиком
Home / End — первый / последний
1…9 + Enter — переход на слайд
B — чёрный экран
T — fade  ·  R — rise  ·  S — slide
H — эта справка  ·  F11 — полный экран